/*
 * @Author: 9ilk 3535851673@qq.com
 * @Date: 2024-11-10 21:58:31
 * @LastEditors: 9ilk 3535851673@qq.com
 * @LastEditTime: 2024-11-15 21:16:07
 * @FilePath: /zhuang/Signal/Signal.cc
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string>
#include <vector>
#include <functional>
#include <cstdio>
using namespace std;
//易变关键字
volatile int flag = 0;

void change(int signo)
{
  (void)signo;
  flag = 1;
  printf("change flag 0->1 \n");
}

int main()
{
  ::signal(2, change);
  while (!flag);
  printf("我是正常退出的\n");
  return 0;
}

// void PrintPending()
// {
//   sigset_t pending;
//   ::sigpending(&pending);
//   cout << "Pending List: ";
//   for (int signo = 31; signo > 0; signo--)
//   {
//     if (sigismember(&pending, signo))
//       cout << "1";
//     else
//       cout << "0";
//   }
//   cout << endl;
// }

// void PrintBlock()
// {
//   sigset_t set, oset;
//   sigemptyset(&set);
//   sigemptyset(&oset);
//   sigprocmask(SIG_BLOCK, &set, &oset);
//   cout << "blocklist: ";
//   for (int signo = 31; signo > 0; signo--)
//   {
//     if (sigismember(&oset, signo))
//       cout << "1";
//     else
//       cout << "0";
//   }
//   cout << endl;
// }

// void handler(int signo)
// {
//   static int cnt = 0;
//   cnt++;
//   while (true)
//   {
//     cout << "get a sig : " << signo << ",cnt: " << cnt << endl;
//     PrintPending();
//     sleep(1);
//     break;
//   }
// }

// int main()
// {
//   struct sigaction act, oact;
//   act.sa_handler = handler;
//   sigemptyset(&act.sa_mask);
//   sigemptyset(&oact.sa_mask);
//   ::sigaddset(&act.sa_mask, 3);
//   ::sigaddset(&act.sa_mask, 4);
//   ::sigaddset(&act.sa_mask, 5);

//   ::sigaction(2, &act, &oact);
//   while (true)
//   {
//     PrintPending();
//     pause();
//   }
//   return 0;
// }
